home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / blit.arc / BALLOC.C < prev    next >
Text File  |  1985-05-23  |  2KB  |  54 lines

  1. /*
  2.  * name:         balloc
  3.  *
  4.  *  description: allocate a bitmap and return a pointer to it,
  5.  *               using the rectangle r, which is the on-screen
  6.  *              rectangle that corresponds to the bitmap image.
  7.  *
  8.  * synopsis:     struct bitmap *balloc (r)
  9.  *              struct rectangle   *r;
  10.  *
  11.  * globals:      none.
  12.  *
  13.  * calls:        malloc  (libc)
  14.  *
  15.  * called by:    newlayer  (newlayer.c)
  16.  *              addobs     (addobs.c)
  17.  */
  18. #include "layers.h"
  19.  
  20. struct bitmap *balloc (r)
  21. struct rectangle  *r;
  22. {
  23.    struct bitmap   *b;
  24.    int      h;
  25.    int      w;
  26.    int      startbits;
  27.    int      nwords;
  28.    int      size;
  29.  
  30.    char    *malloc ();
  31.  
  32.  /*
  33.  * allocate storage for a bitmap and return a pointer to it
  34.  */
  35.    w = r -> corner.x - r -> origin.x;
  36.    h = r -> corner.y - r -> origin.y;
  37.    startbits = wordsize - (r -> origin.x % wordsize);
  38.    if (w <= startbits)
  39.        nwords = 1;
  40.    else
  41.        nwords = (w - startbits - 1) / wordsize + 2;
  42.    size = nwords * h + 1;              /* the extra word is because of the way
  43.                                           my implementation of bitblt works */
  44.    b = (struct bitmap *) malloc ((unsigned) sizeof (struct bitmap));
  45.    b -> bm_base = (unsigned short *) malloc ((unsigned) (size * 2));
  46.    b -> bm_width = nwords;
  47.    b -> bm_rect.origin.x = r -> origin.x;
  48.    b -> bm_rect.origin.y = r -> origin.y;
  49.    b -> bm_rect.corner.x = r -> corner.x;
  50.    b -> bm_rect.corner.y = r -> corner.y;
  51.    b -> bm_obs = null;                    /* not used in a bitmap */
  52.     return (b);
  53. }
  54.